<?php
/**
* Controlador de login
*  @filesource
 * @author			Diogo Corazolla
 * @copyright		Copyright 2009 M2R
 * @package			broffices
 * @subpackage		broffices.application.controllers
 * @version			1.0
*/
class LoginController extends Zend_Controller_Action
{
	
	/**
	 * Este m�todo sera executado sempre que a classe for instanciada,
	 * depois do construtor.
	 * Faz o carregamento das classes que ser�o usadas pelo controlador.
	 *
	 * @return void
	 */
	public function init()
	{
		Zend_Loader::loadClass('Usuario');
		Zend_Loader::loadClass('Perfil');
		Zend_Loader::loadClass('Acesso');
		Zend_Loader::loadClass('UsuarioContrato');
	}

	/**
	 * Metodo que mostra a pagina inicial
	 *
	 * @return void
	 */
	public function indexAction()
	{
		$this->loginAction();
	}
	
	/**
	 * Metodo que mostra o formulario de login
	 *
	 * @return void
	 */
	public function loginAction()
	{
		// exibe tela
		$this->montaTela("login/bodyindex.tpl", 
							array());
	}
	
 	function realizaLoginAction()
	{
		$post = Zend_Registry::get('post');
		$login = $post->login;
		$senha = $post->senha;
		$bln_areacliente = $post->bln_areacliente;

		Zend_Loader::loadClass('Zend_Auth_Adapter_DbTable');
		$authAdapter = new Zend_Auth_Adapter_DbTable(Zend_Db_Table::getDefaultAdapter());

		//setando as colunas e as tabelas aonde vai conferir os dados
		$authAdapter->setIdentityColumn('vhr_login');
		$authAdapter->setCredentialColumn('vhr_senha');
		$authAdapter->setTableName('tbl_usuario');
		
		//setando os dados
		$authAdapter->setIdentity($login);
		$authAdapter->setCredential($senha);
		
		Zend_Loader::loadClass('Zend_Auth');
			
		$auth = Zend_Auth::getInstance();
		$result = $auth->authenticate($authAdapter);
		
		// Verifica se a senha confere
		if ($result->isValid()) {
			//Senha confere
			$data = $authAdapter->getResultRowObject(null, 'vhr_senha');
			
			$tblUsuario = new Usuario();
			$rowUsuario = $tblUsuario->busca(array("vhr_login="=>$data->vhr_login))->current();

			$contrato_id = 0;
			$tblUsuarioContrato = new UsuarioContrato();
			$rsUsuarioContrato = $tblUsuarioContrato->busca(array("usuario_id="=>$rowUsuario->id))->current();

			if(count($rsUsuarioContrato)>0){
				$contrato_id = $rsUsuarioContrato->contrato_id;
			}
			
			$rowPerfil = $rowUsuario->findParentRow("Perfil");
			if ($rowUsuario->bln_ativo == 1)
			{
				// pegando dados do usuario e setando no objeto
				$usuario['id']   = $data->id;
				$usuario['login']   = $data->vhr_login;
				$usuario['perfil_id'] = $data->perfil_id;
				$usuario['perfil_prefixo'] = $rowPerfil->vhr_prefixo;
				$usuario['perfil_nome'] = $rowPerfil->vhr_nome;
				$usuario['usuario_nome'] = $data->vhr_nome;
				$usuario['contrato_id'] = $contrato_id;
				
				$tblAcesso = new Acesso();
				$data = array("usuario_id"=>$usuario['id'], "dte_data"=>date("Y-m-d H:i:s"), "vhr_ip"=>$_SERVER["REMOTE_ADDR"]);
				$tblAcesso->insert($data);
					
				$auth->getStorage()->write($usuario);
				$this->_redirect('/');
			} 
			else
			{
				$this->sairAction();
			}
		}
		else 
		{
			// Senha nao confere
			$this->_request->setModuleName("default");
			$this->_request->setControllerName("login");
			// Volta pra pagina de login
			$this->_request->setActionName("index");
			$this->_forward("index","login","default");
		
			$mensagem = "<font color='red'>Login e/ou Senha inv&aacute;lidos</font>";
			
			if($bln_areacliente=="true")
			{
				$this->montaTela("login/bodyindexareacliente.tpl", 
									array("mensagem"=>$mensagem), 
									false);
			}else{
				$this->montaTela("login/bodyindex.tpl", 
									array("mensagem"=>$mensagem), 
									true);
			}
		}
	}
	
	/**
	 * Metodo que mostra o formulario de login
	 *
	 * @return void
	 */
	public function recuperarSenhaFormAction()
	{
		$get = Zend_Registry::get('get');
		// exibe tela
		$this->montaTela2("login/bodyrecuperarsenha.tpl", 
							array(), 
							false);
	}

	
	/**
	 * Metodo que mostra o formulario de login
	 *
	 * @return void
	 */
	public function trocaSenhaFormAction()
	{
		$get = Zend_Registry::get('get');
		
		$auth = Zend_Auth::getInstance();
		$usuario = $auth->getIdentity();
		
		// exibe tela
		$this->montaTela2("login/bodytrocasenha.tpl", 
							array("usuario_id"=>$usuario["id"]), 
							false);
	}
	/**
	 * Metodo que mostra o formulario de login
	 *
	 * @return void
	 */
	public function recuperarSenhaAction()
	{
		$_site = Zend_Registry::get("site");
		
		$post = Zend_Registry::get('post');
		$login = $post->login;
		$tblUsuario = new Usuario();
		$rsUsuario = $tblUsuario->busca(array("vhr_login="=>$login))->current();
		
		if(count($rsUsuario) > 0){
			try{
				$conteudoemail = "
				Foi solicitado a recupera&ccedil;&atilde;o de senha do seu cadastro no sistema Broffices.<br>
				Segue abaixo a sua senha:<br><br>
				<strong>SENHA: ".$rsUsuario->vhr_senha."</strong><br><br>
				";
				
				$mail = new Zend_Mail();
				$mail->setBodyHtml($conteudoemail);
				$mail->setFrom("broffices@broffices.com.br", "BR-Offices");
				$mail->addBcc("broffices@broffices.com.br", "'".utf8_decode($arrParametros['nome_cliente'])."'");
				$mail->addTo($rsUsuario->vhr_email);
				$mail->setSubject('Lembrete de senha - Broffices');
				
				$transport = new Zend_Mail_Transport_Smtp($_site['mail']['host'],$_site['mail']);
				
				//$mail->send($transport);
				$mail->send($transport);
				
				$mensagem = "Sua senha foi enviada ao seu endere&ccedil;o de e-mail";
			}catch(Exception $e){
				echo $e->getMessage();
				$mensagem = "Falha ao enviar email";
			}
		}else{
			$mensagem = "Nenhum usu&aacute;rio identificado com este login ";
		}
		
		// exibe tela
		$this->montaTela2("login/bodymensagem.tpl", 
							array("mensagem"=>$mensagem), false);
	}
	

	/**
	 * Metodo que mostra o formulario de login
	 *
	 * @return void
	 */
	public function trocaSenhaAction()
	{
		$_site = Zend_Registry::get("site");
		
		$post = Zend_Registry::get('post');
		$usuario = $post->usuario_id;
		$senha = $post->senha;
		
		$tblUsuario = new Usuario();
		$rsUsuario = $tblUsuario->find($usuario)->current();
		$rsUsuario->vhr_senha = $senha;
		$rsUsuario->save();
		$mensagem = "Senha alterada com sucesso";
		$_site = Zend_Registry::get("site");
		$script = "\$('#div_form').html('');\n";	
		
		// exibe tela
		$this->montaTela2("login/bodymensagem.tpl", 
							array("mensagem"=>$mensagem,
								  "script"=>$script), false);
	}
	
	public function sairAction()
	{
		$auth = Zend_Auth::getInstance();
		$usuario = $auth->getIdentity();
		if($usuario["perfil_id"] ==  Constantes::cteCodPerfilCliente)
		{
			Zend_Auth::getInstance()->clearIdentity();
			$this->_redirect('/area-cliente');
		}else{
			Zend_Auth::getInstance()->clearIdentity();
			$this->_redirect("/");
		}
	}
	 
	/**
	 * Monta a tela de retorno ao usuario
	 * @param string $corpo - arquivo tpl do corpo
	 * @param array $dados - array com os dados a serem inseridos na tela, no seguinte formato "nome"=>"valor"
	 * @return void
	 */
	private function montaTela($corpo, $dados=array(), $exibeHeader=true)
	{
		// iniciando view
		$view = Zend_Registry::get('view');
		// setando corpo
		$view->assign('_corpo',$corpo);

		// pegando variaveis globais do site
		$_site = Zend_Registry::get("site");
		// setando variaveis globais ao template
		$view->assign('_site', $_site);
		
		// percorrendo array de dados e inserindo no template
		foreach ($dados as $dado=>$valor)
		{
			$view->assign($dado, $valor);
		}
		
		// define o template master
		$tplLayout = $_site["layout_login"];
		// se exibirHeader for verdadeiro
		if ($exibeHeader)
		{
			// adiciona cabecalho
			$view->assign('_cabecalho', $_site["header"]);
			// adiciona menu
			$view->assign('_menu', $_site["menu"]);
			// adiciona rodape
			$view->assign('_rodape', $_site["footer"]);
		}
		// se exibirHeader for falso
		else
		{
			// define template master sem cabecalho
			$tplLayout = $_site["layout_sem_header"];
		}
		// retorna o tempalte master, com corpo e variaveis setadas
		$view->output($tplLayout);		
	}
	
	public function montaTela2($corpo, $dados=array(), $exibeHeader=true, $exibeJSCSS=false)
	{
		// iniciando view
		$view = Zend_Registry::get('view');
		// setando corpo
		$view->assign('_corpo',$corpo);

		// pegando variaveis globais do site
		$_site = Zend_Registry::get("site");
		// setando variaveis globais ao template
		$view->assign('_site', $_site);
		
		// percorrendo array de dados e inserindo no template
		foreach ($dados as $dado=>$valor)
		{
			$view->assign($dado, $valor);
		}
		
		// define o template master
		$tplLayout = $_site["layout"];
		// se exibirHeader for verdadeiro
		if ($exibeHeader)
		{
			// adiciona cabecalho
			$view->assign('_cabecalho', $_site["header"]);
			// adiciona menu
			$view->assign('_menu', $_site["menu"]);
			// adiciona rodape
			$view->assign('_rodape', $_site["footer"]);
		}
		// se exibirHeader for falso
		else
		{
			if($exibeJSCSS){
				// define template master sem cabecalho mas com js e css
				$tplLayout = $_site["layout_so_corpo"];
			}else{
				// define template master sem cabecalho
				$tplLayout = $_site["layout_sem_header"];
			}
		}
		// retorna o tempalte master, com corpo e variaveis setadas
		$view->output($tplLayout);
	}
}
